/******************************************************************************* 
  Copyright (C), 1988-2020, zeno Tech. Co., Ltd.
  Description:  调试命令接口,提供应用程序统一的调试命令管理接口
  Function List:
            
*******************************************************************************/
#ifndef DISK_H 
#define DISK_H

#ifdef __cplusplus
extern "C" {
#endif

/*=============================================================================
                                 Includes                                  
==============================================================================*/

/*=============================================================================
                               Macro Definition
==============================================================================*/
/* SD卡制定信息最大长度 */
#define FDISK_SMARTINFO_LEN                  (256)

/* 硬盘序列号长度 */
#define FDISK_SERIAL_LEN                     (64)

                        
/*=============================================================================
                        Local Structures and Typedef 
==============================================================================*/
/* 磁盘定制信息 */
typedef struct
{
	int     replaceBlockLeft;                       /* 剩余备份块数 */
    int     replaceBlockNum;                        /* 出厂备份块数 */
    int     replaceLifePer;                         /* 卡片的剩余寿命千分比 */
    char    devInfo[FDISK_SMARTINFO_LEN];           /* 磁盘状态信息 */
} FDISK_smartInfo_t;


/* 设备类型 */
typedef enum
{
    FDISK_MEDIA_FLASH,
	FDISK_MEDIA_DISK,
	FDISK_MEDIA_CDROM
} FDISK_mediaType_t;


/* 设备总线类型 */
typedef enum
{
	FDISK_BUS_MMC,
	FDISK_BUS_USB,
	FDISK_BUS_SATA
} FDISK_busType_t;


typedef struct
{
    char name[32];  /*磁盘名称*/
    unsigned long long size;       /*磁盘扇区数，扇区大小512字节*/
    /* 当前只有一个存储设备，物理编号固定为0。
       后续物理编号统一规划，原则同一物理接口上的设备，物理编号不变 */
    int orderId;    /* 总线物理排序 从1开始 */
    int port;       /* 物理端口号 */
    int part;       /* 分区号 */
    char partFsName[32];
	int mediaType;	/* 设备类型,定义见FDISK_mediaType_t */
	int busType;	/* 总线类型,定义见FDISK_busType_t */
	char serial[FDISK_SERIAL_LEN];    /* 硬盘序列号 */
} FDISK_storageInfo_t;


/*=============================================================================
                             extern  Variables                                  
==============================================================================*/

/*******************************************************************************
  Function:     FDISK_ForceReset
  Description:  强制复位存储设备
  Input:        - pFdiskName: 存储设备路径
  Output:       无
  Return:        0: 成功
                <0: 失败
  Others:       无
*******************************************************************************/ 
int FDISK_ForceReset(char *pFdiskName);


/*******************************************************************************
  Function:     FDISK_GetSmartInfo
  Description:  获取SD卡定制化信息
  Input:        - pDiskName: 磁盘路径
  Output:       - pSmartInfo: SMART信息
  Return:        0: 成功
                <0: 失败
  Others:       无
*******************************************************************************/ 
int FDISK_GetSmartInfo(char *pDiskName, 
                       FDISK_smartInfo_t *pSmartInfo);

/*******************************************************************************
  Function:     FDISK_CreatePart
  Description:  添加分区
  Input:        - pDevName: 设备名指针
                - pPart: 分区名
                - start: 分区起始偏移量
                - total: 分区大小
  Output:       无
  Return:       >=0: 分区号
                <0: 失败
  Others:       无
*******************************************************************************/ 
int FDISK_CreatePart(char *pDevName,
                    char *pPart,
                    unsigned long long start, 
                    unsigned long long total);


/*******************************************************************************
  Function:     FDISK_DelPart
  Description:  删除分区
  Input:        - pDevName: 设备名指针
                - pPart: 分区名
  Output:       无
  Return:        0: 成功
                <0: 失败
  Others:       无
*******************************************************************************/ 
int FDISK_DelPart(char *pDevName, char *pPart);


/*******************************************************************************
  Function:     FDISK_StorageGetPart
  Description:  得到存储设备或分区信息
  Input:        - maxCount: 缓存个数 
                - onlyZLFS只获取私有文件系统
                - isPart 是否支持分区
  Output:       - pStorageList: 设备名指针
  Return:       >=0: 设备或分区个数
                <0: 失败
  Others:       无
*******************************************************************************/ 
int FDISK_StorageGetPart(FDISK_storageInfo_t *pStorageList,
                         unsigned int maxCount,
                         int onlyZLFS,
                         int isPart);


/*******************************************************************************
  Function:     FDISK_Fsync
  Description:  同步硬盘数据
  Input:        无
  Output:       无
  Return:       无
  Others:       无
*******************************************************************************/ 
void FDISK_Fsync(void);


#ifdef __cplusplus
}
#endif
#endif // DISK_H 

